<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作用域</title>
</head>
<body>
    <!-- js的作用域有三种：全局作用域，局部作用域，块级作用域 -->
    <script>
        
        // function x(){
        //     var a = 1;
        // }
        // x()
        // // a 是局部作用域
        // console.log(a)
        // ————————————————————————————————————————————
        // 自由变量:一个变量在当前作用域中没有定义，但却被使用了
        // let a = 10;
        // function x(){
        //     let b = 20;
        //     function y(){
        //         console.log(a+b)
        //     }  
        //     y()  
        // }
        // x()
        // 自由变量会向上级作用域一层一层的寻找，直到找到为止。
        // y 函数中的a,b 变量就是自由变量。
        // ——————————————————————————————————————————————
        // 闭包
        // 1，函数作为返回值被返回
        // function create(){
        //     let a = 100;
        //     return function (){
        //         console.log(a)
        //     }
        // }
        // let fn = create();
        // let a = 200;
        // fn()
        // 2,函数作为参数被传递
        function print(fn){
            let a = 30;
            fn()
        }
        let a = 500;
        function fn(){
            console.log(a)
        }
        print(fn)
        // 总结：所有自由变量的查找都是在函数定义的地方，向上级作用域一层一层的查找，而不是在执行的时候





    </script>
</body>
</html>